#include "moegirl.h"

#include <httpclient.h>

MoeGirl::MoeGirl()
{

}

QString MoeGirl::name()
{
    return "萌娘百科";
}

QString MoeGirl::prefix()
{
    return "https://mzh.moegirl.org.cn";
}

/**
 * @brief MoeGirl::searching
 * @param text
 * @note 来源于  https://mzh.moegirl.org.cn/api.php

action              query                                       表示执行的操作是查询
format              json                                        返回数据的格式是 JSON
formatversion       2                                           使用的 API 版本是 2
errorformat         html                                        错误信息的格式是 HTML
prop                pageimages%7Ccategories                     请求的属性，包括页面图片和分类
list                search                                      要查询的列表类型是搜索
generator           search                                      使用搜索生成器进行查询
piprop              thumbnail                                   请求的图片属性是缩略图
pithumbsize         100                                         缩略图的大小为 100x100 像素
clshow              !hidden                                     显示隐藏类别（以感叹号开头的类别）
cllimit             5                                           限制返回的隐藏类别数量为 5
srsearch            萌娘百科                                     搜索关键词是 "萌娘百科"
srqiprofile         classic                                     使用经典搜索查询配置文件
srprop              snippet|titlesnippet|wordcount|timestamp    请求的搜索结果属性，包括摘要、标题摘要、字数和时间戳
gsrsearch           萌娘百科                                     全局搜索关键词是 "萌娘百科"
gsrqiprofile        classic                                     使用经典全局搜索查询配置文件

继续查询:
    &sroffset=10&gsroffset=10&continue=gsroffset||

 * @return
 */
QStringList MoeGirl::searching(const QString &text)
{
    QStringList list;

    Request req(this->prefix() + "/api.php");
    req.addQuery("action", "query");
    req.addQuery("format", "json");
    req.addQuery("formatversion", "2");
    req.addQuery("errorformat", "html");
    req.addQuery("prop", "pageimages|categories");
    req.addQuery("list", "search");
    req.addQuery("generator", "search");
    req.addQuery("piprop", "thumbnail");
    req.addQuery("pithumbsize", "100");
    req.addQuery("clshow", "!hidden");
    req.addQuery("cllimit", "5");
    req.addQuery("srsearch", text.isEmpty() ? "萌娘百科" : text);
    req.addQuery("srqiprofile", "classic");
    req.addQuery("srprop", "snippet|titlesnippet|wordcount|timestamp");
    req.addQuery("gsrsearch", text.isEmpty() ? "萌娘百科" : text);
    req.addQuery("gsrqiprofile", "classic");

    auto query_pages = HttpClient::instance().get(req).toMap().value("query").toMap().value("pages").toList();
    if (text.isEmpty() == false) {
        req.addQuery("sroffset", "10");
        req.addQuery("gsroffset", "10");
        req.addQuery("continue", "|||");
        query_pages << HttpClient::instance().get(req).toMap().value("query").toMap().value("pages").toList();
        req.addQuery("sroffset", "20");
        req.addQuery("gsroffset", "20");
        req.addQuery("continue", "|||");
        query_pages << HttpClient::instance().get(req).toMap().value("query").toMap().value("pages").toList();
        req.addQuery("sroffset", "30");
        req.addQuery("gsroffset", "30");
        req.addQuery("continue", "|||");
        query_pages << HttpClient::instance().get(req).toMap().value("query").toMap().value("pages").toList();
        req.addQuery("sroffset", "40");
        req.addQuery("gsroffset", "40");
        req.addQuery("continue", "|||");
    }

    foreach (auto var, query_pages) {
        auto map = var.toMap();
        list << map.value("title").toString();
    }

    return list;
}

QString MoeGirl::content(const QString &text)
{
    return this->prefix() + "/" + text;
}

